#ifndef FRIEND_H
#define FRIEND_H

#include <QWidget>
#include <QTextEdit>//信息显示
#include <QListWidget>//列表显示
#include <QLineEdit>//行输入
#include <QPushButton>//按钮
#include <QVBoxLayout>//垂直布局
#include <QHBoxLayout>//水平布局
#include <QCompleter>//输入框匹配单词器

#include "online.h"//添加online界面
#include "protocol.h"//把协议加过来

#include <QDebug>
#define qcout qDebug()<<"---------["<<__FILE__ <<":"<< __LINE__<<"]-->"



class Friend : public QWidget
{
    Q_OBJECT
public:
    explicit Friend(QWidget *parent = nullptr);

    //单例模式, 产生静态的一个操作界面, 应用程序程序只产生这一个Friend界面
    static Friend& getInstance();

    //显示所有在线用户
    void showAllOnlineUsr(const PDU * pdu);

    //显示搜索用户查询结果
    void showSearchUsr(const PDU * pdu);





public slots:
    //显示在线好友框
    void showOnline();

    //显示在线用户按钮槽函数, 向服务器发送查询所有在线用户的请求
    void slot_m_pShowOnlineUsrPB_clicked();

    //搜索用户按钮槽函数, 向服务器发送搜索用户的查询请求
    void slot_m_pSearchUsrPB_clicked();


signals:
    //m_pShowOnlineUsrPB向OpeWidget发送信号, 用于在OpeWidget::TextEdit上显示log输出
    void signal_m_pShowOnlineUsrPB_clicked(enum ENUM_PUSHBUTTON_TYPE e, QString text);
    //m_pSearchUsrPB向OpeWidget发送信号, 用于在OpeWidget::TextEdit上显示log输出
    void signal_m_pSearchUsrPB_clicked(enum ENUM_PUSHBUTTON_TYPE e, QString text);


    //m_pShowOnlineUsrPB向TcpClient发送信号, 用tcpsocket向服务器发送查看所有在线用户的信息
    void signals_sendToServerPBOnline();
    //m_pSearchUsrPB向TcpClient发送信号, 用tcpsocket向服务器发送搜索用户的信息
    void signals_sendToServerPBSearch(QString text);



private:

    QTextEdit *m_pShowMsgTE;//显示信息

    QLineEdit *m_pInputSearchUsrNameTE;//输入要搜索的用户名框
    QStringList wordList;//输入框匹配设置
    QCompleter *completer;//匹配器

    QListWidget *m_pFriendListWidget;//好有列表
    QLineEdit *m_pInputMsgLE;//信息输入框

    QPushButton *m_pDelFriendPB;//删除好友按钮
    QPushButton *m_pFlushFriendPB;//刷新好友按钮
    QPushButton *m_pShowOnlineUsrPB;//显示在线用户
    QPushButton *m_pSearchUsrPB;//搜索用户

    QPushButton *m_pMsgSendPB;//消息发送按钮
    QPushButton *m_pPrivateChatPB;//私聊按钮

    Online *m_pOnline;//online界面

    QVBoxLayout *pRightVBL;//布局
    QHBoxLayout *pTopHBL;
    QHBoxLayout *pMsgHBL;
    QVBoxLayout *pMain;

};

#endif // FRIEND_H
